package archimede;

import java.awt.Font;
import java.awt.Graphics;
import java.util.Scanner;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

import net.miginfocom.swing.MigLayout;

import com.itextpdf.text.Document;

public class BuildingData extends JPanel {

	/**
	 * dati edifici
	 */
	private DatiEdificio datiEdificio;

	/**
	 * muri e pareti
	 */
	private MuriEPareti muriEpareti;

	/**
	 * impermeabilizzazione
	 */
	private Impermeabilizzazione impermeabilizzazione;

	/**
	 * INTONACO
	 */
	private Intonaco intonaco;
	/**
	 * MURI INTERMEDI
	 */
	private MuriIntermediPanel muriIntermedi;
	/**
	 * MURI PERIMETRALI
	 */
	private MuriPerimetraliPanel muriPerimetrali;

	/**
	 * setta il colore di sfondo
	 */

	protected void paintComponent(Graphics g) {
		setOpaque(false);
		g.drawImage(
				(new ImageIcon(ClassLoader.getSystemResource("sfondo.jpg")))
						.getImage(), 0, 0, null);
		super.paintComponent(g);
	}

	/**
	 * 
	 * @param st
	 *            frame principale
	 * @param de
	 *            dati edificio
	 */
	public BuildingData(final StartingWindow st, DatiEdificio de) {
		super();
		// inizializza
		datiEdificio = de;
		impermeabilizzazione = new Impermeabilizzazione(st);
		intonaco = new Intonaco(st);
		muriIntermedi = new MuriIntermediPanel(st);
		muriPerimetrali = new MuriPerimetraliPanel(st);
		muriEpareti = new MuriEPareti(st);

		setLayout(new MigLayout("", "", "25[]5[]25[]5[]25[]5[]"));

		JLabel tre_1 = new JLabel("Caratteristiche dei muri");
		tre_1.setFont(new Font("Arial", Font.BOLD, 20));

		JLabel tre_2 = new JLabel("Impermeabilizzazione");
		tre_2.setFont(new Font("Arial", Font.BOLD, 20));

		JLabel tre_3 = new JLabel("Tipo dell'intonaco,della pittura e periodo");
		tre_3.setFont(new Font("Arial", Font.BOLD, 20));

		add(tre_1, "wrap , gapleft 15");
		add(muriEpareti, "wrap, gapleft 15");
		add(muriPerimetrali, "wrap , gapleft 15");
		add(muriIntermedi, "wrap , gapleft 15");

		add(tre_2, "wrap, gapleft 15");
		add(impermeabilizzazione, "wrap, gapleft 15");

		add(tre_3, "wrap, gapleft 15");
		add(intonaco, "wrap, gapleft 15");

	}

	public String print() {
		String print = "";
		print = print + datiEdificio.print();
		print = print + muriEpareti.print();
		print = print + muriPerimetrali.print();
		print = print + muriIntermedi.print();
		print = print + impermeabilizzazione.print();
		print = print + intonaco.print();
		print = print + "\n@@Building data end";
		return print;
	}

	public void setFields(String done) {
		Scanner c = new Scanner(done);
		c.nextLine();
		String data = "";
		// 20 righe per dati edificio
		for (int i = 0; i < 20; i++) {
			data = data + "\n" + c.nextLine().substring(1);
		}
		// System.out.println("+++ dati edificio +++\n" + data);
		datiEdificio.setElement(data);

		// max=numero di professionisti , 10 righe per professionista
		int max = 0;
		try {
			data = c.nextLine().substring(1);
//			System.out.println(data);
			max = Integer.parseInt(data);
		} catch (Exception e) {
			max = 0;
		}
		for (int i = 0; i < max; i++) {
			for (int j = 0; j < 10; j++)
				data = data + "\n" + c.nextLine().substring(1);
		}
		datiEdificio.setProfessionista(data);

		// 5 righe dati edificio
		data = "";
		for (int i = 0; i <5; i++) {
			data = data + "\n" + c.nextLine().substring(1);
		}
		// System.out.println("+++ dati edificio +++\n" + data);
		muriEpareti.setElement(data);

		// max=numero muri perimetrali , 8 righe per muro
		max = 0;
		try {
			data = c.nextLine().substring(1);
			max = Integer.parseInt(data);
		} catch (Exception e) {
			max = 0;
		}
		for (int i = 0; i < max; i++) {
			for (int j = 0; j < 8; j++)
				data = data + "\n" + c.nextLine().substring(1);
		}
		// System.out.println("+++ muriPerimetrali add +++\n" + "\n" + data);
		muriPerimetrali.setElement(data);

		// max=numero muri intermedi , 4 righe per muro
		max = 0;
		try {
			data = c.nextLine().substring(1);
//			System.out.println(data);
			max = Integer.parseInt(data);
		} catch (Exception e) {
			max = 0;
		}
		// data = "";
		for (int i = 0; i < max; i++) {
			for (int j = 0; j < 4; j++)
				data = data + "\n" + c.nextLine().substring(1);
		}
		// System.out.println("+++ muriIntermedi add +++\n" + "\n" + data);
		muriIntermedi.setElement(data);

		// 24 righe impermeabilizzazione
		data = "";
		for (int i = 0; i < 24; i++) {
			data = data + "\n" + c.nextLine().substring(1);
		}
		// System.out.println("+++ impermeabilizzazione +++\n" + data);
		impermeabilizzazione.setElement(data);

		// 3 righe per intonaco esterno
		data = "";
		for (int i = 0; i < 3; i++) {
			data = data + "\n" + c.nextLine().substring(1);
		}
		intonaco.setElement(data);

		// max=numero di lati , 5 righe per lato
		max = 0;
		try {
			data = c.nextLine().substring(1);
//			System.out.println(data);
			max = Integer.parseInt(data);
		} catch (Exception e) {
			max = 0;
		}
		for (int i = 0; i < max; i++) {
			for (int j = 0; j < 5; j++)
				data = data + "\n" + c.nextLine().substring(1);
		}
		intonaco.setLatoIntonaco(data);

		// note dell'intonaco
		data = "";
		data = data + c.nextLine().substring(1);
		while (c.hasNextLine()) {
			data = data + "\n" + c.nextLine();
		}
		intonaco.setNote(data);

		// System.out.println("+++ intonaco +++\n" + data);

	}

	/**
	 * crea pagine 1 , 2 , 3 pdf
	 * 
	 * @param doc = documento pdf
	 * @return
	 */
	public Document PDFintro(Document doc) {
		//pagina iniziale
		datiEdificio.PDFfront(doc);
		doc.newPage();
		//indice
		datiEdificio.PDFindice(doc);
		doc.newPage();
		//premesse parte iniziale
		datiEdificio.PDFpremesse(doc);
		return doc;
	}

	
	public Document PDFdati(Document doc) {
		doc.newPage();
		muriEpareti.PDF(doc);
		muriPerimetrali.pdf(doc);
		muriIntermedi.pdf(doc);
		impermeabilizzazione.PDF(doc);
		doc.newPage();
		intonaco.PDF(doc);

		return doc;
	}
}
